*************************** * BASIC PROGRAMING NOTES * *************************** BASIC stands for Beginner's All-purpose Symbolic Instruction Code. [filename][]>stdout][/f:n][/i][/s:n][/c:n][/m:[n][,n]][/d] BASICA Loads the GW-BASIC INTERPRETER. BASICA program Runs the basic language program. BASICA program >DATA.OUT Data output by the PRINT statement goes into the DATA.OUT file. BASICA program 0 40 A$ = LEFT$(A$,(INSTR(A$," "))-1) + MID$(A$,(INSTR(A$," "))+1) 50 WEND 60 PRINT "(";A$;")" RUN ( Robert A. Cloutier ) (RobertA.Cloutier) 10 A$ = "ROB CLOUTIER " 20 A$ = LEFT$(A$,(INSTR(A$," ")-1)) 30 PRINT A$ RUN ROB OK ** EXTRACTING A NUMBER FROM A STRING ** 10 A$ = "12-25-91" 20 FOR X% = 1 TO LEN(A$): X$ = MID$(A$,X%,1) 30 IF X$ >= "0" AND X$ <= "9" THEN B$ = B$ + X$ 40 NEXT: PRINT B$ RUN OK 122591 ** EXTRACTING THE PROGRAM NAME FROM A DIRECTORY PATH ** 10 A$ = "C:\BASIC\PRGMS\TESTING1.BAS": B$ = "" 20 FOR X = LEN(A$) TO 1 STEP -1 30 X$ = MID$(A$,X,1) 40 IF X$ = "\" OR X$ = ":" THEN X = 1: GOTO 70 50 IF X$ = "." THEN B$ = "": GOTO 70 60 B$ = X$ + B$ 70 NEXT 80 IF LEN(B$) > 8 THEN PRINT "FILENAME TOO LONG!" 90 PRINT A$: PRINT B$ RUN C:\BASIC\PRGMS\TESTING1.BAS TESTING1 ** PRINT STRING BACKWARDS ** 10 A$ = "CLOUTIER" 20 FOR X = LEN(A$) TO 1 STEP -1: B$ = B$ + MID$(A$,X,1): NEXT: PRINT B$ or 20 FOR X = 1 TO LEN(A$): B$ = MID$(A$,X,1) + B$: NEXT: PRINT B$ RUN REITUOLC CONCATENATING STRINGS --------------------- 10 A$="FILE":B$="NAME" 20 PRINT "NEW " + A$+B$ or 20 PRINT "NEW ";A$;B$ RUN NEW FILENAME INSTR ----- 10 ON INSTR("SET", X$) GOTO 1450, 1420, 1520: GOTO 10 10 X$ = "R": IF INSTR("ROB",X$) THEN PRINT "TRUE" ELSE PRINT "FALSE" RUN TRUE ** DATE & TIME ** --------------------------------------------------------------------- TIME$ Shows the systems time. DATE$ Shows the systems date. 10 '** CONVERT DATE FROM MM-DD-YY TO DD MMM YY) ** 20 X$ = DATE$ 'MM-DD-YYYY 30 FOR X% = 1 TO VAL(LEFT$(X$, 2)): READ M$: NEXT 40 DATA "JAN","FEB","MAR","APR","MAY","JUN","JUL","AUG","SEP","OCT","NOV","DEC" 50 TODAY$ = MID$(X$, 4, 2) + " " + M$ + " " + RIGHT$(X$, 2) 'DD MMM YY 60 PRINT TODAY$ 10 '** CONVERT DATE FROM MM-DD-YY TO YYMMDD ** 20 DAY$=RIGHT$(DATE$,2)+LEFT$(DATE$,2)+MID$(DATE$,4,2) 'DAY$=YYMMDD 30 PRINT DAY$ ** CHANGE 3 CHARACTER MONTH TO A 2 DIGIT MONTH ** ------------------------------------------------- 10 X$ = "FEB" 20 A$ = " JAN FEB MAR APR MAY JUN JUL AUG SEP OCT NOV DEC " 30 Y = ((2+(INSTR(A$,X$+" ")))/4) 40 IF Y-FIX(Y) = 0 THEN PRINT X$;" =";Y ELSE BEEP RUN FEB = 2 IF DATE$="02-26-1989" THEN PRINT "HAPPY BIRTHDAY JUDY!" ELSE END 10 CLS 20 INPUT "How many seconds"; S 30 PRINT "START TIME = "; TIME$ 40 FOR X = 1 TO S 50 A$ = TIME$ 60 WHILE A$ = TIME$ 70 LOCATE 3,15: PRINT TIME$ 80 WEND 90 NEXT X 100 PRINT "FINISH TIME = "; TIME$ 10 CLS: INPUT "HOW MANY SECONDS"; S 20 T = TIMER: PRINT "START TIME = "; T 30 WHILE TIMER < T + S 40 LOCATE 3,15: PRINT TIMER, TIMER - T;" " 50 WEND 60 PRINT "FINISH TIME = "; TIMER, TIMER - T 10 '* GET DAY FROM DOS * 20 OPEN "CR-LF" FOR OUTPUT AS #1: PRINT #1, "": CLOSE #1 30 SHELL "DATE >TEMP 100 THEN GOTO 10 ** PAUSE UNTIL ONE KEY IS PRESSED ** 10 WHILE INKEY$="": WEND 10 WHILE REPLY$ = "": REPLY$ = INKEY$: WEND 10 X$=INPUT$(1) 10 X$=INKEY$: IF X$="" THEN 10 10 A$=INPUT$(1) : A=VAL(A$) 20 IF A<1 OR A>3 THEN GOTO 10 20 ON A GOTO 1000,2000,3000 10 A$="AaDdVvEe" 20 PRINT "A=ADD D=DELETE V=VIEW E=EDIT" 30 X$=INPUT$(1) - or - 30 X$=INKEY$: IF X$="" THEN 30 - or - 30 X$="":WHILE X$="":X$=INKEY$: WEND 40 ON INSTR(A$,X$) GOTO 100,100,200,200,300,300,400,400: GOTO 30 100 PRINT "ADD A RECORD":END 200 PRINT "DELETE A RECORD":END 300 PRINT "VIEW A RECORD":END 400 PRINT "EDIT A RECORD":END 10 CLS: INPUT "INPUT AN ASCII CODE";A 20 LOCATE 1,35: PRINT "= ";: COLOR 14,4 30 IF A>255 THEN PRINT "NONE": GOTO 60 40 A$ = STR$(A): X$ = " 7 , 9 , 10 , 11 , 12 , 13 , 28 , 29 , 30 , 31 " 50 IF INSTR(X$,A$+" ")=0 THEN PRINT CHR$(A) ELSE DEF SEG=&HB800: POKE 72,A 60 COLOR 7,0: END --------------------------------------------------------------------- ** CHANGE TO UPPER CASE LETTERS ** 10 X$ = "a" 20 X$ = CHR$(ASC(X$) AND 223) 30 PRINT X$ RUN A 10 X$ = INPUT$(1): X% = ASC(X$) 20 IF X% > 96 AND X% < 123 THEN X$ = CHR$(X% - 32) 30 PRINT X$ RUN ? f F 10 A$ = "Cloutier 2910" 20 FOR X = 1 TO LEN(A$) 30 IF MID$(A$,X,1) < "a" OR MID$(A$,X,1) > "z" THEN 50 40 MID$(A$,X,1) = CHR$(ASC(MID$(A$,X,1))-32) 50 NEXT: PRINT A$ RUN CLOUTIER 2910 ** DEF SEG ** -------------------------------------------------------------------------- 10 DEF SEG 20 '** PRINT THE EXECUTING BASIC PROGRAMS NAME ** 30 FOR X = 3491 TO 3501: PRINT CHR$(PEEK(X));: NEXT 'or 473 - 484 40 '** PRINT THE FOREGROUND, BACKGROUND, AND BORDER COLOR ** 50 PRINT: PRINT PEEK(2803); PEEK(2804); PEEK(2805) 'or 828, 830, 832 10 '** This will print ANY character on the screen, ** 15 '** even the nonprintable ones. ** 20 SCREEN 0,0,0: CLS 30 IF PEEK(&H463) = &HB4 THEN VIDEO.SEG% = &HB000 ELSE VIDEO.SEG% = &HB800 40 '&HB000 = MONOCHROME SCREEN &HB800 = COLOR/GRAPHICS SCREEN 50 INPUT "ROW"; R%: INPUT "COL"; C% 60 INPUT "ASCII CODE"; ASCII%: INPUT "COLOR"; COLR% 70 ADDRESS% = ((R%-1)*160)+((C%-1)*2) 80 ' 90 DEF SEG = VIDEO.SEG% 100 POKE ADDRESS%, ASCII% 110 POKE ADDRESS% + 1, COLR% 120 ' 130 ' POKE X,Y X = POS ON SCREEN, Y = ASCII CODE 140 ' X = ((ROW-1)*160) + ((COL-1)*2) DEFINE -------------------------------------------------------------------------- ** STRIP LEADING/TRAILING SPACES FROM NUMBERS ** 10 DEF FNST$(Z) = MID$(STR$(Z),2+(Z<0)) 20 A$ = " 2 ": A$ = FNST$(VAL(A$)) ' OR A = 2: A$ = FNST$(A) 30 PRINT A$ RUN 2 ** CHANGE DAY TO A NUMBER FROM 1-7 ** 10 DEF FNDAY(D$)=(2+INSTR("SunMonTueWedThuFriSat",LEFT$(D$,3)))/3 ** CHANGE TO UPPER CASE ** 10 DEF FNCAP$(X$)=CHR$(ASC(X$) AND 223) 20 INPUT X$:X$=FNCAP$(X$):PRINT X$ RUN ? g G ** CENTER TEXT ** 10 DEF SEG=0:DEF FNCTR$(X$)=SPACE$(((PEEK(1098)+256*PEEK(1099))-LEN(X$))/2)+X$ 20 INPUT A$:PRINT FNCTR$(A$) RUN ? CLOUTIER CLOUTIER 10 DEF SEG=0:DEF FNCTR=((PEEK(1098)+256*PEEK(1099))-LEN(X$))/2 20 INPUT X$:LOCATE 5,FNCTR:PRINT X$ RUN ? CLOUTIER CLOUTIER SCREEN -------------------------------------------------------------------------- ** 40 & 80 WIDTH CHARACTERS AT THE SAME TIME ** 10 SCREEN 2:CLS:DEF SEG=0 20 POKE 1097,4:POKE 1098,40 30 PRINT "40 CHARACTERS" 40 POKE 1097,6:POKE 1098,80 50 PRINT "80 CHARACTERS" SCREEN m,c,a,v m = MODE c = COLOR ON/OFF a = ACTIVE PAGE v = VISUAL PAGE 1. 4 Max pages for mode 0 on a CGA monitor. 2. Changing the screen mode will clear all pages. 3. Use CSRLIN and POS to keep track of cursor location. 4. Do not execute SYSTEM until SCREEN 0,0,0,0 (Ex. SCREEN 0,0,0,0: SYSTEM) 10 SCREEN ,,0,0: CLS 20 LOCATE 7,31: PRINT "THIS IS SCREEN 0." 30 LOCATE 15,35: PRINT "PRESS ESC!": LOCATE 1,1 40 SCREEN ,,1,1: CLS 50 LOCATE 7,31: PRINT "THIS IS SCREEN 1." 60 LOCATE 15,35: PRINT "PRESS ESC!": LOCATE 1,1 70 X$ = INPUT$(1): IF X$ <> CHR$(27) THEN GOTO 70 80 IF S = 1 THEN S = 0 ELSE S = 1: SCREEN ,,S,S: GOTO 70 SCREEN(row,col) 10 CLS: PRINT "ROBERT CLOUTIER" 20 FOR J = 1 TO 3 30 A$ = A$ + CHR$(SCREEN(1,J)) 40 NEXT J 50 PRINT A$ RUN ROB OK 10 '** This will print ANY character on the screen. ** 20 SCREEN 0,0,0: CLS: DEF SEG = &HB800 '&HB800 = COLOR/GRAPHICS SCREEN 30 INPUT "ROW"; R: INPUT "COL"; C: INPUT "ASCII CODE"; ASCII 40 POKE ((R-1)*160)+((C-1)*2), ASCII 50 ' 60 '* POKE X,Y X=POS ON SCREEN, Y=ASCII CODE * 70 '* X = ((ROW-1)*160) + ((COL-1)*2) 10 "** PRINT SCREEN ** 20 WIDTH "LPT1:",80 30 FOR ROW = 1 TO 25 40 FOR COL = 1 TO 80 50 CHAR = SCREEN(ROW,COL) 60 IF CHAR = 0 THEN CHAR = 32 70 LPRINT CHR$(CHAR); 80 NEXT COL, ROW WINDOWS -------------------------------------------------------------------------- 10 VIEW PRINT 5 TO 8 'PRINT ONLY ON LINES 5 - 8 20 FOR X = 1 TO 5: PRINT TAB(5) "LINE"; X: NEXT 30 VIEW PRINT 'RESETS TO PRINT AN LINES 1 - 24 40 END 10 'A RESTRICTED WINDOW FOR LINES PRINTED TO THE SCREEN 20 DEF SEG 30 POKE 1612,5 'TOP LINE 40 POKE 1613,10 'BOTTOM LINE 50 POKE 1609,20 'RIGHT COLUMN 60 FOR X = 1 TO 10: PRINT "LINE"; X: NEXT 70 END 80 POKE 1612,1: POKE 1613,24: POKE 1609,80 'NORMAL/DEFAULT CURSOR LOCATION -------------------------------------------------------------------------- 10 '** PRINT THE LOCATION OF THE CURSOR ** 20 LOCATE 12, 5 30 A = PEEK(1625): B = PEEK(1626) 40 PRINT A B 50 LOCATE 14, 10 60 A = PEEK(1625): B = PEEK(1626) 70 PRINT A B RUN 12 5 14 10 OK CSRLIN = LINE POSITION OF THE CURSOR POS(0) = COLUMN POSITION OF THE CURSOR LOCATE ------ LOCATE row,col,cursor,start,stop row = 1-25, col = 1-80, cursor = 1(on) or 0(off), start = 0-7, stop = 0-7 Default = LOCATE ,,0,7,7 LOCATE ,,1,7,7 _ LOCATE ,,1,3,3 - LOCATE ,,1,4,7 Ü LOCATE ,,1,0,7 Û LOCATE ,,1,1,0 nothing SHELL -------------------------------------------------------------------------- SHELL with no string will go to DOS. SHELL C:> DIR C:> EXIT OK 10 SHELL "SORT SORTED.FIL" FOR - NEXT & GOSUB - RETURN LOOPS -------------------------------------------------------------------------- 1. Code NEXT vice NEXT A% because it will make your prgms run 35% faster. 2. The NEXT statement will increment the most recent FOR statement variable, not the first one. 3. The RETURN statement will follow the same rule as the NEXT statement and will return control to the most recent GOSUB statement. ** EXAMPLES ** 10 FOR J% = 1 TO 1: PRINT J%: NEXT: PRINT "AFTER NEXT, J% = ";J% RUN 1 AFTER NEXT, J% = 2 10 FOR A% = 1 TO 2: PRINT A%;: GOSUB 20: NEXT: END 20 FOR B% = 3 TO 4: PRINT B%;: GOSUB 30: NEXT: RETURN 13 FOR C% = 5 TO 6: PRINT C%;: NEXT: RETURN RUN 1 3 5 6 4 5 6 2 3 5 6 4 5 6 10 FOR A% = 1 TO 10 15 X% = A% * 2 20 IF X% > 10 THEN A% = 10: GOTO 40 30 PRINT X%; 40 NEXT 50 PRINT: PRINT "A% =";A%,"X% =":X% RUN 2 4 6 8 10 A% = 11 Z% = 12 10 FOR A% = 1 TO 2 10 FOR A% = 1 TO 2 20 FOR B% = 3 TO 4 20 FOR B% = 3 TO 4 30 PRINT A% * 2;: NEXT 30 PRINT B% * 2;: NEXT 40 PRINT B% * 2;: NEXT 40 PRINT A% * 2;: NEXT RUN RUN 2 2 10 4 4 10 6 8 2 6 8 4 10 FOR A% = 1 TO 5: STEP 2: PRINT A%;: NEXT RUN 1 3 5 10 FOR A% = 5 TO 1: STEP -2: PRINT A%;: NEXT RUN 5 3 1 10 FOR A% = 5 TO 1: STEP -1: PRINT A%;: NEXT RUN 5 4 3 2 1 10 A$ = "CLOUTIER" 10 A$ = "CLOUTIER" 20 FOR A% = 1 TO LEN(A$) 20 FOR A% = LEN(A$) TO 1 STEP -1 30 PRINT MID$(A$,LEN(A$)+1-A%,1); -OR- 30 PRINT MID$(A$,A%,1); 40 NEXT 40 NEXT RUN RUN REITUOLC REITUOLC 10 FOR X = 8 TO 11: PRINT "("+RIGHT$(STR$(X),2)+") ": NEXT RUN ( 8) ( 9) (10) (11) PROTECTED FILES --------------- A program that has been SAVEd in protected format (SAVE "filename",P) can be unprotected with the following technique. (a) In BASICA type the following program and RUN it: 10 OPEN "RECOVER.BAS" FOR OUTPUT AS #1 20 PRINT #1, CHR$(255); 30 CLOSE #1 (b) LOAD the protected program into memory. (c) Enter LOAD "RECOVER.BAS" The formerly protected program will now be in memory and can be LISTed. -------------------------------------------------------------------------------- * Record numbers can have any value from 1 to 16777215. * The maximum amount of characters in a statement or string is 255. * The maximum length of a variable is 40 characters. * Each statement is seperated by a colon (:). * The line numbers my be any number between 0 and 65529 * Reusing an existing line number causes all of the information in the original line to be lost and replaced by the new information. * An edited/changed line will not be recorded unless the RETURN key is pressed when the cursor is some where on that line. * If you type in a lower case for a reserved word the computer will change them to upper case when you enter the command LIST. ALT KEY ASSIGNMENTS ------------------- ALT-A AUTO ALT-B BSAVE ALT-C COLOR ALT-D DELETE ALT-E ELSE ALT-F FOR ALT-G GOTO ALT-H HEX$ ALT-I INPUT ALT-J ALT-K KEY ALT-L LOCATE ALT-M ALT-N NEXT ALT-O OPEN ALT-P PRINT ALT-Q ALT-R RUN ALT-S SCREEN ALT-T THEN ALT-U USING ALT-V VAL ALT-W WIDTH ALT-X XOR ALT-Y ALT-Z To enter an extended character (ASCII codes 128-255) the ASCII code must be entered with the numeric keypad keys and not the top row numeric keys. Hold the ALT key down while entering the ASCII code. Release the ALT key and the character will be displayed on the screen. CREATING FILES -------------- PROGRAM FILE COMMANDS --------------------- SAVE "filename"[,a][,p] A saves the prgm in ASCII format. P saves the prgm in protected format. Default will save the prgm in binary format. LOAD "filename"[,r] R automatically RUNs the prgm. RUN "filename"[,r] R leaves the files open. MERGE "filename" Copies ASCII file into prgm. KILL "filename" Deletes a file. NAME "old filename" AS "new filename" Renames a file. FILES [drive:\directory] Displays DIRectory of a disk. SEQUENTIAL FILES STATEMENTS AND FUNCTIONS ----------------------------------------- CLOSE EOF INPUT# LINE INPUT# LOC LOCK LOF OPEN PRINT# PRINT# USING UNLOCK WRITE# SCREEN = SCRN: PRINTER = LPT1: KEYBOARD = KYBD: PRINT TO THE SCREEN OR PRINTER ------------------------------ 10 CLS: PRINT "1. SCREEN": PRINT "2. PRINTER" 20 X = VAL(INPUT$(1)): IF X<1 OR X>2 THEN GOTO 20 30 IF X = 1 THEN DEV$ = "SCRN:" ELSE DEV$ = "LPT1:" 40 OPEN DEV$ FOR OUTPUT AS #1 50 PRINT #1, TAB(10) "ROBERT A. CLOUTIER" 60 PRINT #1, SPACE$(9) + "SSGT"; 70 PRINT #1, SPC(10); "USMC" 80 CLOSE: END Write to a sequential file -------------------------- 10 OPEN "FILENAME.EXT" FOR OUTPUT AS 1 20 PRINT#1, "D" 30 PRINT#1, "Q" 40 PRINT#1, "" 50 CLOSE Read from a sequential file and get the number of records in a file ------------------------------------------------------------------- PARMIN$(1) = "FILENAME.EXT" OPEN PARMIN$(1) FOR INPUT AS #1 A$ = "": NumOfRec% = 0 WHILE NOT EOF(1) LINE INPUT #1, A$ NumOfRec% = NumOfRec% + 1 WEND CLOSE PRINT "NumOfRec% =" NumOfRec% Get the size of a file & see if it exists ----------------------------------------- PARMIN$(1) = "FILENAME.EXT" OPEN PARMIN$(1) AS 1: LenOfFile& = LOF(1): CLOSE IF LenOfFile& = 0 THEN BEEP: PRINT PARMIN$(1); " IS EMPTY!" KILL PARMIN$(1): END END IF ** DISPLAYS ANY FILE, JUST LIKE THE DOS COMMAND: TYPE filename | MORE ** 10 'SAVE"TYPE.BAS",A 20 CLS: KEY OFF: INPUT "File to read";F$ 30 OPEN F$ FOR INPUT AS 1: WHILE NOT EOF(1) 40 LINE INPUT #1,A$: X=X+INT((LEN(A$)/80)+.99) 50 IF X>23 THEN LOCATE 24: PRINT "... MORE";: X$=INPUT$(1): X=X-23: PRINT 60 PRINT A$: WEND 10 DEF SEG = &HB800: SCREEN 0,0,0: KEY OFF 20 OPEN "d:\myprgms\scroller.bas" FOR INPUT AS #1 30 J=0: CLS: WHILE NOT EOF(1) 40 IF J = 1600 THEN LOCATE 23: PRINT "press a key": A$=INPUT$(1): GOTO 30 50 B$=INPUT$(1,1) 52 'POKE 2*J,ASC(B$) 'ascii code 55 PRINT HEX$(ASC(B$)); 'hex code 58 J=J+1 60 WEND 62 POKE 2*J,26 'prints the end of file arrow 63 CLOSE #1:LOCATE 23,10: PRINT"end of file":A$=INPUT$(1): CLS ** THIS COUNTS HOW MANY CHARACTERS PER RECORD IF ** ** THERE ARE LESS THAN 256 CHARACTERS PER RECORD ** 10 OPEN "ADDRESS.FIL" FOR INPUT AS #1: LINE INPUT#1, A$: PRINT LEN(A$): END ADD 2 MORE TO THE NUMBER TO ACCOUNT FOR THE CARRIAGE RETURN (CHR$(13)) AND THE LINE FEED (CHR$(10)). RANDOM FILES ------------ OPEN "filespec" FOR RANDOM AS #n LEN=g OPEN "DATA.FIL" AS #1 LEN=80 ** INDICATES IF A FILE EXISTS OR NOT ** 10 FILE$ = "SCROLLER.NEW" 20 OPEN FILE$ AS 1: L = LOF(1): CLOSE 30 IF L > 0 THEN 50 ELSE KILL FILE$ 40 PRINT "THAT FILE IS EMPTY!": GOTO 60 50 PRINT "FILE EXISTS!" 60 PRINT L: FILES "SCROLLER.*" NUMOFREC = LOF(1) / record length Shows you how many records in the file ** THIS COUNTS HOW MANY CHARACTERS PER RECORD ** ** FOR ANY LENGTH RANDOM FILE. ** 10 CLS: INPUT "What file do you want to know the LRECL for"; DF$ 20 OPEN DF$ AS #1 LEN = 100: FIELD #1, 100 AS A$ 30 GET #1: FOR J = 1 TO LEN(A$) 40 B = ASC(MID$(A$,J,1)) 50 IF B = 13 THEN GOTO 80 60 NUMOFCHRS = NUMOFCHRS + 1 70 NEXT J: X=X+1: GOTO 30 80 PRINT "There are";NUMOFCHRS;"characters in each record." 90 PRINT "Add 2 to account for the CRLF at the end of each record.": END If the record length is greater than 128 then you must invoke BASICA from DOS with the statement BASICA filename /S:g where g is the record length up to a max of 32767. Since each sector of a disk consists of 512 bytes, the greatest efficiency results from using record length 512. BLOAD -------------------------------------------------------------------------- You can display a screen within your BASIC program by creating the screen with THEDRAW and saving it by selecting the BSAVE option. In order to display the screen in you BASIC program, simply code in the following format: BLOAD "drive:\directory\filename.BSV" EXAMPLE: 120 BLOAD "A:\SCREENS\MAINMENU.BSV" ** COLOR ** -------------------------------------------------------------------------- SCREEN 0 : COLOR [foreground][,[background][,border]] SCREEN 1 : COLOR [background][,[palette]] SCREEN 7-9 : COLOR [foreground][,[background]] The default color is 7 (foreground), 0 (background), 0 (border). Selection range: Foreground 0-31 Background 0-7 Border 0-15 *** SORT *** -------------------------------------------------------------------------- Accending order = SPACE, A-Z, 0-9 C>SORT [/r][/+n] SORT sorted.txt /+1 (Sorts the file unsorted.txt according to the character in column 1, and redirects it to file sorted.txt) DIR | SORT /+14 | MORE (Sorts the directory according to the file size, and displays it to the screen one page at a time.) 10 'SAVE"SORTTEST",A 20 LRECL = 93: OPEN "TEST.FIL" FOR RANDOM AS 1 LEN = LRECL 30 FIELD 1, 1 AS NN$(0), LRECL-3 AS NN$(1), 2 AS NN$(2) 40 NUMOFREC! = LOF(1) / LRECL: FLIP = 1: Y = 2: C$ = "" 50 ' 60 WHILE FLIP = 1: FLIP = 0: GET 1, Y-1: A$ = NN$(1): C$ = A$ 70 FOR X = Y TO NUMOFREC!: GET 1, X: B$ = NN$(1) 80 IF A$ > B$ THEN GOTO 90 ELSE GOSUB 120: A$ = B$: GOTO 110 90 PUT 1, X-1: IF FLIP = 1 GOTO 110 ELSE IF X <> 2 THEN Y = X-1 100 FLIP = 1 110 C$ = B$: NEXT: GOSUB 120: WEND: CLOSE: END 120 IF C$ <> A$ THEN LSET NN$(1) = A$: PUT 1, X-1 130 RETURN 10 '** SORT THE RECORDS ** 20 SHELL "SORT SORTFIL.$$$" 30 KILL "TEST.FIL" 40 SHELL "COPY SORTFIL.$$$ TEST.FIL" 50 KILL "SORTFIL.$$$" 60 END